package com.mylg.craw.house.command;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

public class ExcelListener implements ReadListener<Map<Integer, String>> {

    private List<OneSheet> sheetList = new ArrayList<>();

    private OneSheet current = new OneSheet();

    private boolean hasHead = false;

    public Function<String, String> apply;

    public static String[] SHEET_NAMES = {"2019年9月份郑州市房地产市场销售数据_1.png",
            "2019年9月份郑州市房地产市场销售数据_2.png",
            "2019年10月份郑州市房地产市场销售数据_1.png",
            "2019年10月份郑州市房地产市场销售数据_2.png",
            "2019年11月份郑州市房地产市场销售数据_1.png",
            "2019年11月份郑州市房地产市场销售数据_2.png",
            "2019年12月份郑州市房地产市场销售数据_1.png",
            "2019年12月份郑州市房地产市场销售数据_2.png",
            "2020年1月份郑州市房地产市场销售数据_1.png",
            "2020年1月份郑州市房地产市场销售数据_2.png",
            "2020年2月份郑州市房地产市场销售数据_1.png",
            "2020年2月份郑州市房地产市场销售数据_2.png",
            "2020年3月份郑州市房地产市场销售数据_1.png",
            "2020年3月份郑州市房地产市场销售数据_2.png",
            "2020年4月份郑州市房地产市场销售数据_1.png",
            "2020年4月份郑州市房地产市场销售数据_2.png",
            "2020年5月份郑州市房地产市场销售数据_1.png",
            "2020年5月份郑州市房地产市场销售数据_2.png",
            "2020年6月份郑州市房地产市场销售情况_1.png",
            "2020年6月份郑州市房地产市场销售情况_2.png",
            "2020年7月份郑州市房地产市场销售情况_1.png",
            "2020年7月份郑州市房地产市场销售情况_2.png",
            "2020年8月份郑州市房地产市场销售情况_1.png",
            "2020年8月份郑州市房地产市场销售情况_2.png",
            "2020年9月份郑州市房地产市场销售情况_1.png",
            "2020年9月份郑州市房地产市场销售情况_2.png",
            "2020年10月份郑州市房地产市场销售情况_1.png",
            "2020年10月份郑州市房地产市场销售情况_2.png",
            "2020年11月份郑州市房地产市场销售情况_1.png",
            "2020年11月份郑州市房地产市场销售情况_2.png",
            "2020年12月份郑州市房地产市场销售情况_1.png",
            "2020年12月份郑州市房地产市场销售情况_2.png",
            "2021年1月份郑州市房地产市场销售数据_1.png",
            "2021年1月份郑州市房地产市场销售数据_2.png",
    };


    @Override
    public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
        hasHead = current.parseHead(headMap);
    }

    @Override
    public void invoke(Map<Integer, String> value, AnalysisContext analysisContext) {
        if (hasHead) {
            current.addRow(value);
        } else {
            hasHead = current.parseHead(value);
        }
    }


    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        String sourceSheet = analysisContext.readSheetHolder().getSheetName();
        String sheetName = sourceSheet;
        if (apply != null) {
            sheetName = apply.apply(sheetName);
        }
        current.setSheetName(sheetName);
        if (current.getType() == null) {
            int index = Integer.parseInt(sourceSheet.substring(5));
            if (index % 2 == 1) {
                current.setType("商品房1");
            } else {
                current.setType("二手房1");
            }
        }

        sheetList.add(current);
        current = new OneSheet();
        hasHead = false;
    }


    private String parseSheetName(String sheetName) {
        if (sheetName.startsWith("sheet")) {
            int index = Integer.parseInt(sheetName.substring(5)) - 1;
            sheetName = SHEET_NAMES[index];
            sheetName = sheetName.substring(0, sheetName.indexOf("月份"));
        }
        return sheetName;
    }

    public List<OneSheet> getDatas() {
        return sheetList;
    }


}
